package com.atguigu.lease.web.admin.controller.apartment;


import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;



//单表查询
//查询所有数据不需要分页
//mybatis-plus的service的扩展方法查询全部支付方式的集合

//实现问题：多了三个字段 createtime updateTime isDeleted
//返回的JSON拥有哪些数据根据实体类生成（默认数据）（Jackson）
//我们的目标：让实体类不是所有的数据都生成JSON
//springmvc接收前端的数据JSON，都是由handleradapter使用Jackson工具完成转换
//修改行为：Jackson有一个注解@JSONignore加到属性上-----属性就不会转化为JSON

//逻辑删除没有真正生效  在父类BaseEntity中添加了@TableLogic注解

/**
 * 使用注解@TableLogic注解，mybatis-plus会自动处理逻辑删除
 */


@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")//类上的requestMapping不一定写
@RestController
public class PaymentTypeController {

    @Autowired
    private PaymentTypeService paymentTypeService;

    @Operation(summary = "查询全部支付方式列表")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
    List<PaymentType> paymentTypeList = paymentTypeService.list();
        return Result.ok(paymentTypeList);
    }


    /**
     * 保存或更新支付方式
     * 实现思路：单表数据的保存和更新
     * mybatis-plus / service /saveOrUpdate -> 对象
     *
     * 实现步骤：
     * 1.导入paymentTypeService对象
     * 2.调用saveOrUpdate方法
     * 3.判断是否成功，但会对象result
     *
     * 实现问题：
     * 1.逻辑添加字段没有设置默认值0 导致修改时不修改
     * 1.1 将baseentity中isDeleted字段设置为0 isDelete = 0 不推荐
     * 1.2 修改表结构  alter table payment_type modify is_deleted int default 0 ;
     *
     * 2.创建和修改时间没有赋值
     *
     * 手动添加（不推荐）
     *                                   if (paymentType.getId() != null){
     *                                             //更新 java.util
     *                                            paymentType.setUpdateTime(new Date());
     *                                         }else{
     *                                             //保存
     *                                            paymentType.setCreateTime(new Date());
     *                                         }
     *
     * 使用mybatis-plus的注解@TableFiled( , fill = INSERT | UPDATE)
     *
     * 这个工具类在APP也需要所以写到common模块中
     */


    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
        boolean b = paymentTypeService.saveOrUpdate(paymentType);
        if (!b) {
            return Result.fail();
        } else {
            return b ? Result.ok() : Result.fail();
        }
    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deletePaymentById(@RequestParam Long id) {
        paymentTypeService.removeById(id);
        return Result.ok();
    }

}















